// Decompiled on 周六 2月 22 19:31:49 CST 2025 with Zomboid Decompiler v0.1.3 using Vineflower.
package zombie.randomizedWorld.randomizedBuilding;

import zombie.core.Rand;
import zombie.iso.BuildingDef;
import zombie.iso.IsoCell;
import zombie.iso.IsoGridSquare;
import zombie.iso.IsoObject;
import zombie.iso.IsoWorld;

public final class RBClinic extends RandomizedBuildingBase {
    @Override
    public void randomizeBuilding(BuildingDef def) {
        IsoCell isoCell = IsoWorld.instance.CurrentCell;

        for (int int0 = def.x - 1; int0 < def.x2 + 1; int0++) {
            for (int int1 = def.y - 1; int1 < def.y2 + 1; int1++) {
                for (int int2 = 0; int2 < 8; int2++) {
                    IsoGridSquare isoGridSquare = isoCell.getGridSquare(int0, int1, int2);
                    if (isoGridSquare != null && this.roomValid(isoGridSquare)) {
                        for (int int3 = 0; int3 < isoGridSquare.getObjects().size(); int3++) {
                            IsoObject isoObject = isoGridSquare.getObjects().get(int3);
                            if (Rand.NextBool(2)
                                && isoObject.getSurfaceOffsetNoTable() > 0.0F
                                && isoObject.getContainer() == null
                                && isoGridSquare.getProperties().Val("waterAmount") == null
                                && !isoObject.hasWater()) {
                                int int4 = Rand.Next(1, 3);

                                for (int int5 = 0; int5 < int4; int5++) {
                                    int int6 = Rand.Next(12);
                                    switch (int6) {
                                        case 0:
                                            this.addWorldItem(
                                                "Scalpel",
                                                isoGridSquare,
                                                Rand.Next(0.4F, 0.6F),
                                                Rand.Next(0.4F, 0.6F),
                                                isoObject.getSurfaceOffsetNoTable() / 96.0F
                                            );
                                            break;
                                        case 1:
                                            this.addWorldItem(
                                                "Bandage",
                                                isoGridSquare,
                                                Rand.Next(0.4F, 0.6F),
                                                Rand.Next(0.4F, 0.6F),
                                                isoObject.getSurfaceOffsetNoTable() / 96.0F
                                            );
                                            break;
                                        case 2:
                                            this.addWorldItem(
                                                "Pills",
                                                isoGridSquare,
                                                Rand.Next(0.4F, 0.6F),
                                                Rand.Next(0.4F, 0.6F),
                                                isoObject.getSurfaceOffsetNoTable() / 96.0F
                                            );
                                            break;
                                        case 3:
                                            this.addWorldItem(
                                                "AlcoholWipes",
                                                isoGridSquare,
                                                Rand.Next(0.4F, 0.6F),
                                                Rand.Next(0.4F, 0.6F),
                                                isoObject.getSurfaceOffsetNoTable() / 96.0F
                                            );
                                            break;
                                        case 4:
                                            this.addWorldItem(
                                                "Bandaid",
                                                isoGridSquare,
                                                Rand.Next(0.4F, 0.6F),
                                                Rand.Next(0.4F, 0.6F),
                                                isoObject.getSurfaceOffsetNoTable() / 96.0F
                                            );
                                            break;
                                        case 5:
                                            this.addWorldItem(
                                                "CottonBalls",
                                                isoGridSquare,
                                                Rand.Next(0.4F, 0.6F),
                                                Rand.Next(0.4F, 0.6F),
                                                isoObject.getSurfaceOffsetNoTable() / 96.0F
                                            );
                                            break;
                                        case 6:
                                            this.addWorldItem(
                                                "Disinfectant",
                                                isoGridSquare,
                                                Rand.Next(0.4F, 0.6F),
                                                Rand.Next(0.4F, 0.6F),
                                                isoObject.getSurfaceOffsetNoTable() / 96.0F
                                            );
                                            break;
                                        case 7:
                                            this.addWorldItem(
                                                "SutureNeedle",
                                                isoGridSquare,
                                                Rand.Next(0.4F, 0.6F),
                                                Rand.Next(0.4F, 0.6F),
                                                isoObject.getSurfaceOffsetNoTable() / 96.0F
                                            );
                                            break;
                                        case 8:
                                            this.addWorldItem(
                                                "SutureNeedleHolder",
                                                isoGridSquare,
                                                Rand.Next(0.4F, 0.6F),
                                                Rand.Next(0.4F, 0.6F),
                                                isoObject.getSurfaceOffsetNoTable() / 96.0F
                                            );
                                            break;
                                        case 9:
                                            this.addWorldItem(
                                                "Tweezers",
                                                isoGridSquare,
                                                Rand.Next(0.4F, 0.6F),
                                                Rand.Next(0.4F, 0.6F),
                                                isoObject.getSurfaceOffsetNoTable() / 96.0F
                                            );
                                            break;
                                        case 10:
                                            this.addWorldItem(
                                                "Gloves_Surgical",
                                                isoGridSquare,
                                                Rand.Next(0.4F, 0.6F),
                                                Rand.Next(0.4F, 0.6F),
                                                isoObject.getSurfaceOffsetNoTable() / 96.0F
                                            );
                                            break;
                                        case 11:
                                            this.addWorldItem(
                                                "Hat_SurgicalMask_Blue",
                                                isoGridSquare,
                                                Rand.Next(0.4F, 0.6F),
                                                Rand.Next(0.4F, 0.6F),
                                                isoObject.getSurfaceOffsetNoTable() / 96.0F
                                            );
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    public boolean roomValid(IsoGridSquare sq) {
        return sq.getRoom() != null
            && ("hospitalroom".equals(sq.getRoom().getName()) || "clinic".equals(sq.getRoom().getName()) || "medical".equals(sq.getRoom().getName()));
    }

    @Override
    public boolean isValid(BuildingDef def, boolean force) {
        return def.getRoom("medical") != null || def.getRoom("clinic") != null || force;
    }

    public RBClinic() {
        this.name = "Clinic (Vet, Doctor..)";
        this.setAlwaysDo(true);
    }
}
